/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sistema.aplicacao;

import com.sistema.db.Banco;
import java.awt.*;
import java.awt.event.*;
import java.net.InetAddress;
import java.sql.ResultSet;
import javax.swing.*;
import javax.swing.event.*;


/**
 *
 * @author geraldo
 */
public class FormPrincipal extends JFrame
{

    private JTabbedPane Abas;
    private JTextField txt_version;
    public static JTextField txt_usuario;
    public static JTextField txt_categoria;
    private static String nome_usuario;
    private static int id_usuario;
    private static String tipo_usuario;
    private static String login_usuario;
    public static JLabel lbCategoria;
    private ImageIcon icone = new ImageIcon( getClass().getResource( "/img/icone.png" ) );
    public static ImageIcon imgCatAdministrador;
    public static ImageIcon imgCatOperador;
    public static ImageIcon imgCatDesativado;
    private Image image = icone.getImage();
    final SystemTray tray = SystemTray.getSystemTray();
    private PopupMenu popup = new PopupMenu();
    private MenuItem itemAbrir = new MenuItem( "Abrir" );
    private MenuItem itemEsconder = new MenuItem( "Esconder" );
    private MenuItem itemFechar = new MenuItem( "Fechar" );
    final TrayIcon trayIcon = new TrayIcon( image, "Controle de Licações", popup );
    private boolean controleJanela = false;
    private PanelAdicionarLigacoes obj;
    private PanelListarLigacoes obj2;
    private static int CODIDOSESSAO = 0;

    public FormPrincipal( int id, String nome, String tipo, String login )
    {

        nome_usuario = nome;
        id_usuario = id;
        tipo_usuario = tipo;
        login_usuario = login;

        setTitle( "Controle de Ligações Suporte" );
        setSize( 800, 680 );
        setDefaultCloseOperation( NORMAL );
        setLayout( null );
        setLocationRelativeTo( null );
        setResizable( false );


        iniciaSessao();
        iniciaComponentes();
        iniciaTray();
        actions();


    }

    public void setVisivel(boolean valor)
    {
        setVisible( valor );
    }

    public void iniciaComponentes()
    {

        obj = new PanelAdicionarLigacoes();
        obj2 = new PanelListarLigacoes();

        Abas = new JTabbedPane();
        Abas.addTab( "Adicionar Ligações", obj );
        Abas.addTab( "Listar Ligações", obj2 );
        Abas.addTab( "Administração", new PanelAdministracao() );
        Abas.addTab( "Sobre", new DialogSobre() );
        add( Abas ).setBounds( 10, 1, 775, 600 );


        txt_usuario = new JTextField( nome_usuario );
        txt_usuario.setHorizontalAlignment( SwingConstants.CENTER );
        add( txt_usuario ).setBounds( 50, 610, 200, 30 );
        txt_usuario.setFont( new Font( "Arial", Font.BOLD, 12 ) );
        txt_usuario.setForeground( Color.BLUE );
        txt_usuario.setEditable( false );
        txt_usuario.setToolTipText( "Nome do usuário logado no sistema");

        imgCatAdministrador = new ImageIcon( getClass().getResource( "/img/ico_administrador.png" ) );
        imgCatOperador = new ImageIcon( getClass().getResource( "/img/ico_operador.png" ) );
        imgCatDesativado = new ImageIcon( getClass().getResource( "/img/ico_desativado.png" ) );

        lbCategoria = new JLabel();
        add( lbCategoria ).setBounds( 340, 610, 30, 30 );



        txt_categoria = new JTextField( tipo_usuario, SwingConstants.LEFT );
        txt_categoria.setHorizontalAlignment( SwingConstants.CENTER );
        add( txt_categoria ).setBounds( 370, 610, 120, 30 );
        txt_categoria.setFont( new Font( "Arial", Font.BOLD, 12 ) );
        txt_categoria.setForeground( Color.BLUE );
        txt_categoria.setEditable( false );
        txt_categoria.setToolTipText( "Categoria do usuário logado no sistema");

        txt_version = new JTextField( DialogSobre.getVersion(), SwingConstants.BOTTOM );
        txt_version.setHorizontalAlignment( SwingConstants.CENTER );
        add( txt_version ).setBounds( 620, 610, 120, 30 );
        txt_version.setFont( new Font( "Arial", Font.BOLD, 12 ) );
        txt_version.setForeground( Color.BLUE );
        txt_version.setEditable( false );
        txt_version.setToolTipText( "Versão atual do sistema");



        verificaTipoUsuario();

    }

    public static void verificaTipoUsuario()
    {

        Banco conn = new Banco();
        ResultSet rs = conn.executarConsulta( "SELECT a.nome, b.descricao as categoria "
                + "FROM usuarios a "
                + "INNER JOIN categoria_usuario b "
                + "ON (a.ref_categoria = b.id) "
                + "WHERE a.id = " + id_usuario + "" );
        conn.fecha();


        try
        {
            while ( rs.next() )
            {
                nome_usuario = rs.getString( "nome" );
                tipo_usuario = rs.getString( "categoria" );
            }

        } catch ( Exception e )
        {
            e.printStackTrace();
        }


        if ( tipo_usuario.equalsIgnoreCase( "Operador" ) )
        {
            //Atualiza nome e icone da categoria
            lbCategoria.setIcon( imgCatOperador );
            txt_usuario.setText( nome_usuario );
            txt_categoria.setText( tipo_usuario );

            //Atualiza tela da administracao
            PanelAdministracao.btnAdminLig.setEnabled( false );
            PanelAdministracao.btnAdminUser.setEnabled( false );
            PanelAdministracao.btnAdminClientes.setEnabled( false );
            PanelAdministracao.btnSessao.setEnabled( false );
            PanelAdministracao.lblTitulo.setEnabled( false );


        } else if ( tipo_usuario.equalsIgnoreCase( "Desativado" ) )
        {
            //Atualiza nome e icone da categoria
            lbCategoria.setIcon( imgCatDesativado );
            txt_usuario.setText( nome_usuario );
            txt_categoria.setText( tipo_usuario );

            JOptionPane.showMessageDialog( null, "O acesso do seu usuário foi DESATIVADO" );
            System.exit( 0 );

        } else
        {
            //Atualiza nome e icone da categoria
            lbCategoria.setIcon( imgCatAdministrador );
            txt_usuario.setText( nome_usuario );
            txt_categoria.setText( tipo_usuario );

            //Atualiza tela da administracao
            PanelAdministracao.btnAdminLig.setEnabled( true );
            PanelAdministracao.btnAdminUser.setEnabled( true );
            PanelAdministracao.btnAdminClientes.setEnabled( true );
            PanelAdministracao.btnSessao.setEnabled( true );
            PanelAdministracao.lblTitulo.setEnabled( true );

        }


    }

    public void iniciaSessao()
    {
        //String host = System.getProperty( "os.name" );
        String host = "";
        String ip = "";

        try
        {

            host = InetAddress.getLocalHost().getHostName();
            ip = InetAddress.getLocalHost().getHostAddress();

        } catch ( Exception e )
        {
            e.printStackTrace();
        }

        Banco conn = new Banco();
        conn.executarAtualizacao( "INSERT INTO sessoes (id,ref_usuario,host,ip,acesso) "
                + "VALUES (''," + id_usuario + ",'" + host + "','" + ip + "',now())" );
        conn.fecha();

        buscaCodigoSessao();

    }

    public void buscaCodigoSessao()
    {
        int codigo = 0;

        Banco conn = new Banco();
        ResultSet rs = conn.executarConsulta( "SELECT id FROM sessoes WHERE ref_usuario = " +id_usuario );
        conn.fecha();

        try
        {
            while( rs.next() )
            {
                CODIDOSESSAO = rs.getInt( "id" );
            }
        }catch( Exception e )
        {
            e.printStackTrace();
        }
    }

    public static void verificaSessao()
    {
        Banco conn = new Banco();
        ResultSet rs = conn.executarConsulta( "SELECT count(*) as conexoes FROM sessoes WHERE ref_usuario = " + id_usuario + "" );
        conn.fecha();
        int conexoes = 0;

        try
        {
            while ( rs.next() )
            {
                conexoes = rs.getInt( "conexoes" );
            }
        } catch ( Exception e )
        {
            e.printStackTrace();
        }

        if ( conexoes == 0 )
        {
            JOptionPane.showMessageDialog( null, "A sessão atual foi finalizada", "Mensagem", JOptionPane.WARNING_MESSAGE );
            System.exit( 0 );
        }

    }

    public static String getNome_usuario()
    {
        return nome_usuario;
    }

    public static String getLogin_usuario()
    {
        return login_usuario;
    }

    public static int getId_usuario()
    {
        return id_usuario;
    }

    public static String getTipo_usuario()
    {
        return tipo_usuario;
    }

    public void iniciaTray()
    {

        trayIcon.setImageAutoSize( true );


        trayIcon.addMouseListener( new MouseListener()
        {

            public void mouseClicked( MouseEvent me )
            {

                if ( me.getButton() == MouseEvent.BUTTON1 )
                {


                    if ( me.getClickCount() == 1 )
                    {
                        if ( controleJanela == false )
                        {
                            setVisible( false );
                            controleJanela = true;

                        } else
                        {
                            setVisible( true );
                            setExtendedState( NORMAL );
                            controleJanela = false;

                        }
                    }
                }
            }

            public void mousePressed( MouseEvent me )
            {
            }

            public void mouseReleased( MouseEvent me )
            {
            }

            public void mouseEntered( MouseEvent me )
            {
            }

            public void mouseExited( MouseEvent me )
            {
            }
        } );

        itemAbrir.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {

                setVisible( true );
                setExtendedState( NORMAL );
                controleJanela = false;

            }
        } );

        itemEsconder.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {

                setVisible( false );
                controleJanela = true;

            }
        } );

        itemFechar.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {
                String[] s = new String[]
                {
                    "Sim", "Não"
                };

                int msg = JOptionPane.showOptionDialog( null, "Fechar a aplicação?", "Mensagem", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, s, "Ok" );

                switch ( msg )
                {
                    case ( JOptionPane.OK_OPTION ):
                        Banco conn = new Banco();
                        conn.executarAtualizacao( "DELETE FROM sessoes WHERE ref_usuario = " + id_usuario + "" );
                        conn.fecha();
                        System.exit( 0 );
                        break;
                }
            }
        } );

        popup.add( itemAbrir );
        popup.add( itemEsconder );
        popup.add( itemFechar );

        try
        {
            tray.add( trayIcon );
        } catch ( AWTException ex )
        {
            JOptionPane.showMessageDialog( null, ex );
        }

    }

    public void actions()
    {


        Abas.addChangeListener( new ChangeListener()
        {

            public void stateChanged( ChangeEvent e )
            {

                obj.atualizaCbxClientes();
                obj.checkTicket.setSelected( false );
                obj2.atualizaComponentes();
                verificaTipoUsuario();
                verificaSessao();

            }
        } );

        this.addWindowListener( new WindowListener()
        {

            public void windowOpened( WindowEvent we )
            {
            }

            public void windowClosing( WindowEvent we )
            {


                String[] s = new String[]
                {
                    "Sim", "Não"
                };

                int msg = JOptionPane.showOptionDialog( null, "Fechar a aplicação?", "Mensagem", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, s, "Ok" );

                switch ( msg )
                {
                    case ( JOptionPane.OK_OPTION ):

                        Banco conn = new Banco();
                        conn.executarAtualizacao( "DELETE FROM sessoes WHERE ref_usuario = " + id_usuario + "" );
                        conn.fecha();

                        System.exit( 0 );
                        break;

                    case ( JOptionPane.NO_OPTION ):
                    {
                    }
                    ;
                    case ( JOptionPane.DEFAULT_OPTION ):
                    {
                    }
                    ;
                }

            }

            public void windowClosed( WindowEvent we )
            {
            }

            public void windowIconified( WindowEvent we )
            {
            }

            public void windowDeiconified( WindowEvent we )
            {
            }

            public void windowActivated( WindowEvent we )
            {
            }

            public void windowDeactivated( WindowEvent we )
            {
            }
        } );




    }
}
